package dao.review;

import java.util.List;

import util.paramvo.MemberPageListParamVO;
import util.paramvo.UnitPageListParamVO;
import util.returnvo.MajorunitReturnVO;
import vo.ReviewVO;

public interface ReviewDAO {
	
	/**
	 * 유닛no로 리뷰 수 가져오기
	 * @param majorunit_no 학과유닛no
	 * @return 리뷰 총 수
	 */
	public int getReviewCount(int majorunit_no) throws Exception;
	
	/**
	 * 특정 학과의 각 종목별 평균
	 * @param majorunit_no
	 * @return
	 */
	public MajorunitReturnVO getAverageScore(int majorunit_no) throws Exception;

	/**
	 * 관심학과 리뷰 중 가장 최신 리뷰(학과유닛 포함). 
	 * 필요한 것만 가져올 것
	 * @param member_no
	 * @return review_title, majorunit(univ(로고포함), college, faculty, major), 각 종목 점수.
	 */
	public ReviewVO getNewestInterestUnitReview(int member_no) throws Exception;

	/**
	 * 해당 유닛의 리뷰 목록 페이징처리해서 불러오기. 정렬은 진실성 순. 진실/거짓이 +1/-1로 되어있기 때문에 sum(truth_vote)에 대해서 내림차순 하면 됨.
	 * @param param int majorunit_no, int rowPerPage, int page
	 * @return
	 */
	public List<ReviewVO> getReviews(UnitPageListParamVO param) throws Exception;

	/**
	 * 해당 학과의 리뷰를 작성한 적이 있는가
	 * @param param int member_no, int majorunit_no
	 * @return 했었으면 1, 안했으면 0
	 */
	public int didWriteReview(ReviewVO param) throws Exception;

	/**
	 * 리뷰 등록
	 * @param param
	 */
	public void registerReview(ReviewVO param) throws Exception;
	
	/**
	 * 리뷰 삭제
	 * @param review_no
	 */
	public void deleteReview(int review_no) throws Exception;

	/**
	 * 내 리뷰 가져오기
	 * @param param
	 * @return
	 */
	public List<ReviewVO> getMyReviews(MemberPageListParamVO param) throws Exception;

	/**
	 * 총 내 리뷰 수
	 * @param member_no
	 * @return
	 */
	public int getMyReviewCount(int member_no) throws Exception;
}
